#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#include <stdlib.h>

// 需要长时间计算的函数
int sqr_func(int n)
{
    int result = n * n;

    sleep(1);

    return result;
}

void *thread_func(void *arg)
{
    int num = *(int *)arg;

    int *result = malloc(sizeof(int));
    *result = sqr_func(num);

    // return result;
    pthread_exit(result); // 结束线程，并指定返回值
}

int main(int argc, char const *argv[])
{
    int nums[5] = {1, 2, 3, 4, 5};
    int sqrs[5];

    struct timeval start, end;
    gettimeofday(&start, NULL);
    pthread_t pts[5];
    // 启动5个线程，分别计算各个数的平方
    for (int i = 0; i < 5; i++)
    {
        // 启动分线程进行长时间计算
        pthread_create(pts + i, NULL, thread_func, nums + i);
    }
    for (int i = 0; i < 5; i++)
    {
        void *result;
        pthread_join(pts[i], &result); // 等待分线程结束，并获取返回值
        sqrs[i] = *(int *)result;
    }
    gettimeofday(&end, NULL);
    printf("计算时间: %ld \n", end.tv_sec - start.tv_sec);

    int sum = 0;
    for (int i = 0; i < 5; i++)
    {
        sum += sqrs[i];
    }
    printf("sum: %d\n", sum);

    return 0;
}
